-- Network Working Group                                     T. Nadeau, Ed.
-- Request for Comments: 3811                           Cisco Systems, Inc.
-- Category: Standards Track                              J. Cucchiara, Ed.
--                                             Marconi Communications, Inc.
--                                                                June 2004


--               Definitions of Textual Conventions (TCs) for
--             Multiprotocol Label Switching (MPLS) Management

   MPLS-TC-STD-MIB DEFINITIONS ::= BEGIN

       IMPORTS

          MODULE-IDENTITY,
          Unsigned32, Integer32,
          transmission           FROM SNMPv2-SMI            -- [RFC2578]

          TEXTUAL-CONVENTION
             FROM SNMPv2-TC;                                -- [RFC2579]

       mplsTCStdMIB MODULE-IDENTITY
          LAST-UPDATED "200406030000Z" -- June 3, 2004
          ORGANIZATION
             "IETF Multiprotocol Label Switching (MPLS) Working
              Group."
          CONTACT-INFO
               "        Thomas D. Nadeau
                        Cisco Systems, Inc.
                        tnadeau@cisco.com

                        Joan Cucchiara
                        Marconi Communications, Inc.
                        jcucchiara@mindspring.com

                        Cheenu Srinivasan
                        Bloomberg L.P.
                        cheenu@bloomberg.net

                        Arun Viswanathan
                        Force10 Networks, Inc.
                        arunv@force10networks.com

                        Hans Sjostrand
                        ipUnplugged
                        hans@ipunplugged.com

                        Kireeti Kompella
                        Juniper Networks
                        kireeti@juniper.net

             Email comments to the MPLS WG Mailing List at
             mpls@uu.net."
          DESCRIPTION
              "Copyright (C) The Internet Society (2004). The
              initial version of this MIB module was published
              in RFC 3811. For full legal notices see the RFC
              itself or see:
              http://www.ietf.org/copyrights/ianamib.html

              This MIB module defines TEXTUAL-CONVENTIONs
              for concepts used in Multiprotocol Label
              Switching (MPLS) networks."

          REVISION "200406030000Z" -- June 3, 2004
          DESCRIPTION
             "Initial version published as part of RFC 3811."

           ::= { mplsStdMIB 1 }

       mplsStdMIB OBJECT IDENTIFIER

       ::= { transmission 166 }

       MplsAtmVcIdentifier ::= TEXTUAL-CONVENTION
          DISPLAY-HINT "d"
          STATUS  current
          DESCRIPTION
             "A Label Switching Router (LSR) that
              creates LDP sessions on ATM interfaces
              uses the VCI or VPI/VCI field to hold the
              LDP Label.

              VCI values MUST NOT be in the 0-31 range.
              The values 0 to 31 are reserved for other uses
              by the ITU and ATM Forum.  The value
              of 32 can only be used for the Control VC,
              although values greater than 32 could be
              configured for the Control VC.

              If a value from 0 to 31 is used for a VCI
              the management entity controlling the LDP
              subsystem should reject this with an
              inconsistentValue error.  Also, if
              the value of 32 is used for a VC which is
              NOT the Control VC, this should
              result in an inconsistentValue error."
          REFERENCE
             "MPLS using LDP and ATM VC Switching, RFC3035."
          SYNTAX  Integer32 (32..65535)

       MplsBitRate ::= TEXTUAL-CONVENTION
          DISPLAY-HINT "d"
          STATUS      current
          DESCRIPTION
             "If the value of this object is greater than zero,
              then this represents the bandwidth of this MPLS
              interface (or Label Switched Path) in units of
              '1,000 bits per second'.

              The value, when greater than zero, represents the
              bandwidth of this MPLS interface (rounded to the
              nearest 1,000) in units of 1,000 bits per second.
              If the bandwidth of the MPLS interface is between
              ((n * 1000) - 500) and ((n * 1000) + 499), the value
              of this object is n, such that n > 0.

              If the value of this object is 0 (zero), this
              means that the traffic over this MPLS interface is
              considered to be best effort."
          SYNTAX  Unsigned32 (0|1..4294967295)

       MplsBurstSize ::= TEXTUAL-CONVENTION
          DISPLAY-HINT "d"
          STATUS      current
          DESCRIPTION
             "The number of octets of MPLS data that the stream
              may send back-to-back without concern for policing.
              The value of zero indicates that an implementation
              does not support Burst Size."
          SYNTAX  Unsigned32 (0..4294967295)

       MplsExtendedTunnelId ::= TEXTUAL-CONVENTION
          STATUS        current
          DESCRIPTION
             "A unique identifier for an MPLS Tunnel.  This may
              represent an IPv4 address of the ingress or egress
              LSR for the tunnel.  This value is derived from the
              Extended Tunnel Id in RSVP or the Ingress Router ID
              for CR-LDP."
          REFERENCE
             "RSVP-TE: Extensions to RSVP for LSP Tunnels,
              [RFC3209].

              Constraint-Based LSP Setup using LDP, [RFC3212]."
          SYNTAX  Unsigned32(0..4294967295)

       MplsLabel ::= TEXTUAL-CONVENTION
          STATUS        current
          DESCRIPTION
             "This value represents an MPLS label as defined in
              [RFC3031],  [RFC3032], [RFC3034], [RFC3035] and
              [RFC3471].

              The label contents are specific to the label being
              represented, such as:

              * The label carried in an MPLS shim header
                (for LDP this is the Generic Label) is a 20-bit
                number represented by 4 octets.  Bits 0-19 contain
                a label or a reserved label value.  Bits 20-31
                MUST be zero.

                The following is quoted directly from [RFC3032].
                There are several reserved label values:

                   i. A value of 0 represents the
                      'IPv4 Explicit NULL Label'.  This label
                      value is only legal at the bottom of the
                      label stack.  It indicates that the label
                      stack must be popped, and the forwarding
                      of the packet must then be based on the
                      IPv4 header.

                  ii. A value of 1 represents the
                      'Router Alert Label'.  This label value is
                      legal anywhere in the label stack except at
                      the bottom.  When a received packet
                      contains this label value at the top of
                      the label stack, it is delivered to a
                      local software module for processing.
                      The actual forwarding of the packet
                      is determined by the label beneath it
                      in the stack.  However, if the packet is
                      forwarded further, the Router Alert Label
                      should be pushed back onto the label stack
                      before forwarding.  The use of this label
                      is analogous to the use of the
                      'Router Alert Option' in IP packets
                      [RFC2113].  Since this label
                      cannot occur at the bottom of the stack,
                      it is not associated with a
                      particular network layer protocol.

                 iii. A value of 2 represents the
                      'IPv6 Explicit NULL Label'.  This label
                      value is only legal at the bottom of the
                      label stack.  It indicates that the label
                      stack must be popped, and the forwarding
                      of the packet must then be based on the
                      IPv6 header.

                  iv. A value of 3 represents the
                      'Implicit NULL Label'.
                      This is a label that an LSR may assign and
                      distribute, but which never actually
                      appears in the encapsulation.  When an
                      LSR would otherwise replace the label
                      at the top of the stack with a new label,
                      but the new label is 'Implicit NULL',
                      the LSR will pop the stack instead of
                      doing the replacement.  Although
                      this value may never appear in the
                      encapsulation, it needs to be specified in
                      the Label Distribution Protocol, so a value
                      is reserved.

                   v. Values 4-15 are reserved.

              * The frame relay label can be either 10-bits or
                23-bits depending on the DLCI field size and the
                upper 22-bits or upper 9-bits must be zero,
                respectively.

              * For an ATM label the lower 16-bits represents the
                VCI, the next 12-bits represents the VPI and the
                remaining bits MUST be zero.

              * The Generalized-MPLS (GMPLS) label contains a
                value greater than 2^24-1 and used in GMPLS
                as defined in [RFC3471]."
          REFERENCE
             "Multiprotocol Label Switching Architecture,
              RFC3031.

              MPLS Label Stack Encoding, [RFC3032].

              Use of Label Switching on Frame Relay Networks,
              RFC3034.

              MPLS using LDP and ATM VC Switching, RFC3035.
              Generalized Multiprotocol Label Switching
              (GMPLS) Architecture, [RFC3471]."
          SYNTAX  Unsigned32 (0..4294967295)

       MplsLabelDistributionMethod ::= TEXTUAL-CONVENTION
          STATUS  current
          DESCRIPTION
             "The label distribution method which is also called
              the label advertisement mode [RFC3036].
              Each interface on an LSR is configured to operate
              in either Downstream Unsolicited or Downstream
              on Demand."
          REFERENCE
             "Multiprotocol Label Switching Architecture,
              RFC3031.

              LDP Specification, RFC3036, Section 2.6.3."
          SYNTAX INTEGER {
                     downstreamOnDemand(1),
                     downstreamUnsolicited(2)
                 }

       MplsLdpIdentifier ::= TEXTUAL-CONVENTION
          DISPLAY-HINT "1d.1d.1d.1d:2d"
          STATUS      current
          DESCRIPTION
             "The LDP identifier is a six octet
              quantity which is used to identify a
              Label Switching Router (LSR) label space.

              The first four octets identify the LSR and
              must be a globally unique value, such as a
              32-bit router ID assigned to the LSR, and the
              last two octets identify a specific label
              space within the LSR."
          SYNTAX  OCTET STRING (SIZE (6))

       MplsLsrIdentifier ::= TEXTUAL-CONVENTION
          STATUS      current
          DESCRIPTION
             "The Label Switching Router (LSR) identifier is the
              first 4 bytes of the Label Distribution Protocol
              (LDP) identifier."
          SYNTAX  OCTET STRING (SIZE (4))
       MplsLdpLabelType ::= TEXTUAL-CONVENTION
          STATUS      current
          DESCRIPTION
             "The Layer 2 label types which are defined for MPLS
              LDP and/or CR-LDP are generic(1), atm(2), or
              frameRelay(3)."
          SYNTAX  INTEGER {
                    generic(1),
                    atm(2),
                    frameRelay(3)
                }

       MplsLSPID ::= TEXTUAL-CONVENTION
          STATUS        current
          DESCRIPTION
             "A unique identifier within an MPLS network that is
              assigned to each LSP.  This is assigned at the head
              end of the LSP and can be used by all LSRs
              to identify this LSP.  This value is piggybacked by
              the signaling protocol when this LSP is signaled
              within the network.  This identifier can then be
              used at each LSR to identify which labels are
              being swapped to other labels for this LSP.  This
              object  can also be used to disambiguate LSPs that
              share the same RSVP sessions between the same
              source and destination.

              For LSPs established using CR-LDP, the LSPID is
              composed of the ingress LSR Router ID (or any of
              its own IPv4 addresses) and a locally unique
              CR-LSP ID to that LSR.  The first two bytes carry
              the CR-LSPID, and the remaining 4 bytes carry
              the Router ID.  The LSPID is useful in network
              management, in CR-LSP repair, and in using
              an already established CR-LSP as a hop in
              an ER-TLV.

              For LSPs signaled using RSVP-TE, the LSP ID is
              defined as a 16-bit (2 byte) identifier used
              in the SENDER_TEMPLATE and the FILTER_SPEC
              that can be changed to allow a sender to
              share resources with itself.  The length of this
              object should only be 2 or 6 bytes.  If the length
              of this octet string is 2 bytes, then it must
              identify an RSVP-TE LSPID, or it is 6 bytes,
              it must contain a CR-LDP LSPID."
          REFERENCE
             "RSVP-TE:  Extensions to RSVP for LSP Tunnels,
              [RFC3209].

              Constraint-Based LSP Setup using LDP,
              [RFC3212]."
          SYNTAX  OCTET STRING (SIZE (2|6))

       MplsLspType ::= TEXTUAL-CONVENTION
          STATUS  current
          DESCRIPTION
             "Types of Label Switch Paths (LSPs)
              on a Label Switching Router (LSR) or a
              Label Edge Router (LER) are:

                 unknown(1)         -- if the LSP is not known
                                       to be one of the following.

                 terminatingLsp(2)  -- if the LSP terminates
                                       on the LSR/LER, then this
                                       is an egressing LSP
                                       which ends on the LSR/LER,

                 originatingLsp(3)  -- if the LSP originates
                                       from this LSR/LER, then
                                       this is an ingressing LSP
                                       which is the head-end of
                                       the LSP,

              crossConnectingLsp(4) -- if the LSP ingresses
                                       and egresses on the LSR,
                                       then it is
                                       cross-connecting on that
                                       LSR."
          SYNTAX INTEGER {
                     unknown(1),
                     terminatingLsp(2),
                     originatingLsp(3),
                     crossConnectingLsp(4)
                 }

       MplsOwner ::= TEXTUAL-CONVENTION
          STATUS      current
          DESCRIPTION
             "This object indicates the local network
              management subsystem that originally created
              the object(s) in question.  The values of
              this enumeration are defined as follows:

              unknown(1) - the local network management
              subsystem cannot discern which
              component created the object.

              other(2) - the local network management
              subsystem is able to discern which component
              created the object, but the component is not
              listed within the following choices,
              e.g., command line interface (cli).

              snmp(3) - The Simple Network Management Protocol
              was used to configure this object initially.

              ldp(4) - The Label Distribution Protocol was
              used to configure this object initially.

              crldp(5) - The Constraint-Based Label Distribution
              Protocol was used to configure this object
              initially.

              rsvpTe(6) - The Resource Reservation Protocol was
              used to configure this object initially.

              policyAgent(7) - A policy agent (perhaps in
              combination with one of the above protocols) was
              used to configure this object initially.

              An object created by any of the above choices
              MAY be modified or destroyed by the same or a
              different choice."
          SYNTAX  INTEGER {
                    unknown(1),
                    other(2),
                    snmp(3),
                    ldp(4),
                    crldp(5),
                    rsvpTe(6),
                    policyAgent(7)
                }

       MplsPathIndexOrZero ::= TEXTUAL-CONVENTION
          STATUS current
          DESCRIPTION
             "A unique identifier used to identify a specific
              path used by a tunnel.  A value of 0 (zero) means
              that no path is in use."
          SYNTAX  Unsigned32(0..4294967295)

       MplsPathIndex ::= TEXTUAL-CONVENTION
          STATUS        current
          DESCRIPTION
             "A unique value to index (by Path number) an
              entry in a table."
          SYNTAX  Unsigned32(1..4294967295)

       MplsRetentionMode ::= TEXTUAL-CONVENTION
          STATUS  current
          DESCRIPTION
             "The label retention mode which specifies whether
              an LSR maintains a label binding for a FEC
              learned from a neighbor that is not its next hop
              for the FEC.

              If the value is conservative(1) then advertised
              label mappings are retained only if they will be
              used to forward packets, i.e., if label came from
              a valid next hop.

              If the value is liberal(2) then all advertised
              label mappings are retained whether they are from
              a valid next hop or not."
          REFERENCE
             "Multiprotocol Label Switching Architecture,
              RFC3031.

              LDP Specification, RFC3036, Section 2.6.2."
          SYNTAX INTEGER {
                     conservative(1),
                     liberal(2)
                 }

       MplsTunnelAffinity ::= TEXTUAL-CONVENTION
          STATUS        current
          DESCRIPTION
             "Describes the configured 32-bit Include-any,
              include-all, or exclude-all constraint for
              constraint-based link selection."
          REFERENCE
             "RSVP-TE:  Extensions to RSVP for LSP Tunnels,
              RFC3209, Section 4.7.4."
          SYNTAX  Unsigned32(0..4294967295)

       MplsTunnelIndex ::= TEXTUAL-CONVENTION
          STATUS        current
          DESCRIPTION
             "A unique index into mplsTunnelTable.
              For tunnels signaled using RSVP, this value
              should correspond to the RSVP Tunnel ID
              used for the RSVP-TE session."
          SYNTAX  Unsigned32 (0..65535)

       MplsTunnelInstanceIndex ::= TEXTUAL-CONVENTION
          STATUS        current
          DESCRIPTION
             "The tunnel entry with instance index 0
              should refer to the configured tunnel
              interface (if one exists).

              Values greater than 0, but less than or
              equal to 65535, should be used to indicate
              signaled (or backup) tunnel LSP instances.
              For tunnel LSPs signaled using RSVP,
              this value should correspond to the
              RSVP LSP ID used for the RSVP-TE
              LSP.

              Values greater than 65535 apply to FRR
              detour instances."
          SYNTAX  Unsigned32(0|1..65535|65536..4294967295)

       TeHopAddressType ::= TEXTUAL-CONVENTION
          STATUS     current
          DESCRIPTION
             "A value that represents a type of address for a
              Traffic Engineered (TE) Tunnel hop.

              unknown(0)   An unknown address type.  This value
                           MUST be used if the value of the
                           corresponding TeHopAddress object is a
                           zero-length string.  It may also be
                           used to indicate a TeHopAddress which
                           is not in one of the formats defined
                           below.

              ipv4(1)      An IPv4 network address as defined by
                           the InetAddressIPv4 TEXTUAL-CONVENTION
                           [RFC3291].

              ipv6(2)      A global IPv6 address as defined by
                           the InetAddressIPv6 TEXTUAL-CONVENTION
                           [RFC3291].

              asnumber(3)  An Autonomous System (AS) number as
                           defined by the TeHopAddressAS
                           TEXTUAL-CONVENTION.

              unnum(4)     An unnumbered interface index as
                           defined by the TeHopAddressUnnum
                           TEXTUAL-CONVENTION.

              lspid(5)     An LSP ID for TE Tunnels
                           (RFC3212) as defined by the
                           MplsLSPID TEXTUAL-CONVENTION.

              Each definition of a concrete TeHopAddressType
              value must be accompanied by a definition
              of a TEXTUAL-CONVENTION for use with that
              TeHopAddress.

              To support future extensions, the TeHopAddressType
              TEXTUAL-CONVENTION SHOULD NOT be sub-typed in
              object type definitions.  It MAY be sub-typed in
              compliance statements in order to require only a
              subset of these address types for a compliant
              implementation.

              Implementations must ensure that TeHopAddressType
              objects and any dependent objects
              (e.g., TeHopAddress objects) are consistent.
              An inconsistentValue error must be generated
              if an attempt to change a TeHopAddressType
              object would, for example, lead to an
              undefined TeHopAddress value that is
              not defined herein.  In particular,
              TeHopAddressType/TeHopAddress pairs
              must be changed together if the address
              type changes (e.g., from ipv6(2) to ipv4(1))."
          REFERENCE
             "TEXTUAL-CONVENTIONs for Internet Network
              Addresses, RFC3291.

              Constraint-Based LSP Setup using LDP,
              [RFC3212]"

          SYNTAX     INTEGER {
                        unknown(0),
                        ipv4(1),
                        ipv6(2),
                        asnumber(3),
                        unnum(4),
                        lspid(5)
                     }

       TeHopAddress ::= TEXTUAL-CONVENTION
          STATUS     current
          DESCRIPTION
             "Denotes a generic Tunnel hop address,
              that is, the address of a node which
              an LSP traverses, including the source
              and destination nodes.  An address may be
              very concrete, for example, an IPv4 host
              address (i.e., with prefix length 32);
              if this IPv4 address is an interface
              address, then that particular interface
              must be traversed.  An address may also
              specify an 'abstract node', for example,
              an IPv4 address with prefix length
              less than 32, in which case, the LSP
              can traverse any node whose address
              falls in that range.  An address may
              also specify an Autonomous System (AS),
              in which  case the LSP can traverse any
              node that falls within that AS.

              A TeHopAddress value is always interpreted within
              the context of an TeHopAddressType value.  Every
              usage of the TeHopAddress TEXTUAL-CONVENTION
              is required to specify the TeHopAddressType object
              which provides the context.  It is suggested that
              the TeHopAddressType object is logically registered
              before the object(s) which use the TeHopAddress
              TEXTUAL-CONVENTION if they appear in the
              same logical row.

              The value of a TeHopAddress object must always be
              consistent with the value of the associated
              TeHopAddressType object.  Attempts to set a
              TeHopAddress object to a value which is
              inconsistent with the associated TeHopAddressType
              must fail with an inconsistentValue error."
          SYNTAX     OCTET STRING (SIZE (0..32))

       TeHopAddressAS ::= TEXTUAL-CONVENTION
          STATUS      current
          DESCRIPTION
             "Represents a two or four octet AS number.
              The AS number is represented in network byte
              order (MSB first).  A two-octet AS number has
              the two MSB octets set to zero."
          REFERENCE
             "Textual Conventions for Internet Network
              Addresses, [RFC3291].  The
              InetAutonomousSystemsNumber TEXTUAL-CONVENTION
              has a SYNTAX of Unsigned32, whereas this TC
              has a SYNTAX of OCTET STRING (SIZE (4)).
              Both TCs represent an autonomous system number
              but use different syntaxes to do so."
          SYNTAX      OCTET STRING (SIZE (4))

       TeHopAddressUnnum ::= TEXTUAL-CONVENTION
          STATUS      current
          DESCRIPTION
             "Represents an unnumbered interface:

              octets   contents               encoding
               1-4     unnumbered interface   network-byte order

              The corresponding TeHopAddressType value is
              unnum(5)."
          SYNTAX      OCTET STRING(SIZE(4))

   END